package com.qf.factory;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

/**
 *  bean工厂（工厂）:管理对象
 *  1. 启动项目，加载properties中所有的信息，
 *  2. 创建所有的对象，存储到Map集合中(key：属性的key， value：创建的对象)
 *  3. 提供getBean方法，可以根据 key获取相应的对象
 * @author bss
 * @version V1.0
 * @Project maven
 * @Package com.qf.factory
 * @Description:
 * @Date 2022/9/26 19:20
 */
public class BeanFactory {
    private static Map<String,Object> map = new HashMap<>();

    static {
        try {
            Properties prop = new Properties();
            InputStream is = BeanFactory.class.getResourceAsStream("/bean.properties");
            prop.load(is);
            //创建对象
            Set<String> names = prop.stringPropertyNames();
            for (String name : names) {
                String clazzName = prop.getProperty(name);
                System.out.println(clazzName);
                //通过反射获取 字节码对象
                Class<?> aClass = Class.forName(clazzName);
                Object obj = aClass.newInstance();
                map.put(name,obj);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Object getBean(String key){
        return map.get(key);
    }

    public static void main(String[] args) {
        Object userServlet = BeanFactory.getBean("userServlet");
        System.out.println(userServlet);
    }

}
